home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
inet
/
internet-drafts
/
draft-freed-smtp-pipeline-00.txt
< prev
next >
Wrap
Text File
|
1993-10-20
|
12KB
|
469 lines
Network Working Group Ned Freed
Internet Draft
<draft-freed-smtp-pipeline-00.txt>
SMTP Service Extension
for Command Pipelining
19-Oct-1993
Status of this Memo
This document is an Internet Draft. Internet Drafts are
working documents of the Internet Engineering Task Force
(IETF), its Areas, and its Working Groups. Note that other
groups may also distribute working documents as Internet
Drafts.
Internet Drafts are valid for a maximum of six months and may
be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet Drafts as reference
material or to cite them other than as a "work in progress".
1. Abstract
This memo defines an extension to the SMTP service whereby a
server can indicate the extent of its ability to accept
multiple commands in a single TCP send operation. Using a
single TCP send operation for multiple commands can improve
SMTP performance significantly.
2. Introduction
Although SMTP is widely and robustly deployed, various
extensions have been requested by some parts of the Internet
community. In particular, many parts of the Internet make use
of high latency network links. SMTP's intrinsic one command-
one response structure is significantly penalized by high
latency links, often to the point where the factors
contributing to overall connection time are dominated by the
time spent waiting for responses to individual commands
(turnaround time).
Internet Draft SMTP Pipelining Oct 1993
In the best of all worlds it would be possible to simply
deploy SMTP client software that makes use of command
pipelining: batching up multiple commands into single TCP send
operations. Unfortunately, the original SMTP specification [1]
did not explicitly state that SMTP servers must support this
type of operation. As a result a non-trivial number of
Internet SMTP servers cannot adequately handle command
pipelining. Flaws known to exist in deployed servers include:
(1) Process forking and connection handoff in the middle of
the SMTP dialogue. Creation of server processes for
incoming SMTP connections is a useful, obvious, and
harmless implementation technique. However, some SMTP
servers defer process forking and connection handoff
until some intermediate point in the SMTP dialogue is
reached. When this is done material read from the TCP
connection and kept in process-specific buffers can be
lost.
(2) Flushing the TCP input buffer when an SMTP command fails.
SMTP commands often fail but there is no reason to flush
the TCP input buffer when this happens. Nevertheless,
some SMTP servers do this.
(3) Improper processing and promulgation of SMTP command
failures. For example, some SMTP servers will refuse to
accept a DATA command if the last RCPT TO command fails,
paying no attention to the success or failure of prior
RCPT TO command results. Other servers will accept a DATA
command even when all previous RCPT TO commands have
failed. Although it is possible to accomodate this sort
of behavior in a client that employs command pipelining,
it does complicate the construction of the client
unnecessarily.
This memo uses the mechanism described in [2] to define an
extension to the SMTP service whereby an SMTP server can
declare that it is capable of handling pipelined commands. The
SMTP client can then check for this declaration and use
pipelining only when the server declares itself capable of
handling it.
Expires Apr 1994 [Page 2]
Internet Draft SMTP Pipelining Oct 1993
3. Framework for the Command Pipelining Extension
The Command Pipelining extension is defined as follows:
(1) the name of the SMTP service extension is Pipelining;
(2) the EHLO keyword value associated with the extension is
PIPELINING;
(3) no parameter is used with the PIPELINING EHLO keyword;
(4) no additional parameters are added to either the MAIL
FROM or RCPT TO commands.
(5) no additional SMTP verbs are defined by this extension;
and,
(6) the next section specifies how support for the extension
affects the behavior of a server and client SMTP.
4. The Pipelining Service Extension
When a client SMTP wishes to employ command pipelining, it
first issues the EHLO command to the server SMTP. If the
server SMTP responds with code 250 to the EHLO command, and
the response includes the EHLO keyword value PIPELINING, then
the server SMTP has indicated that it can accomodate SMTP
command pipelining.
4.1. Client use of pipelining
Once the client SMTP has confirmed that support exists for the
pipelining extension, the client SMTP may then elect to
transmit groups of SMTP commands in batches without waiting
for a response to each individual command. In particular, the
commands RSET, MAIL FROM, SEND FROM, SOML FROM, SAML FROM, and
RCPT TO can all appear anywhere in a pipelined command group.
The EHLO, DATA, VRFY, EXPN, TURN, QUIT, and NOOP commands can
only appear as the last command in a group since their success
or failure produces a change of state which the client SMTP
must accomodate. (NOOP is included in this group so it can be
used as a synchronization point.)
Expires Apr 1994 [Page 3]
Internet Draft SMTP Pipelining Oct 1993
Additional commands added by other SMTP extensions may only
appear as the last command in a group unless otherwise
specified by the extensions that define the commands.
Client SMTP implementations that employ pipelining MUST check
all statuses associated with each command in the group. For
example, if none of the RCPT TO recipient addresses were
accepted the client must then check the response to the DATA
command. If the DATA command was properly rejected the client
SMTP can just issue RSET, but if the DATA command was accepted
the client SMTP should send a single dot.
Client SMTP implementations MUST also check the TCP window
size and make sure that each group of commands fits entirely
within the window. The window size is usually, but not always,
4K octets. Failure to perform this check can lead to deadlock
conditions.
4.2. Server support of pipelining
A server SMTP implementation that offers the pipelining
extension:
(1) MUST NOT flush or otherwise lose the contents of the TCP
input buffer under any circumstances whatsoever.
(2) SHOULD issue a positive response to the DATA command if
and only if one or more valid RCPT TO addresses have been
previously received.
(3) MAY elect to store command responses to RSET, MAIL FROM,
SEND FROM, SOML FROM, SAML FROM, and RCPT TO in an
internal buffer so they can sent as a unit.
(4) MUST NOT buffer responses to EHLO, DATA, VRFY, EXPN,
TURN, QUIT, and NOOP.
(5) MUST NOT buffer responses to unrecognized commands.
(6) MUST send all pending responses immediately whenever the
local TCP input buffer is emptied.
(7) MUST NOT make assumptions about commands that are yet to
be received.
Expires Apr 1994 [Page 4]
Internet Draft SMTP Pipelining Oct 1993
The overriding intent of these server requirements is to make
it as easy as possible for servers to conform to these
pipelining extensions.
5. Examples
Consider the following SMTP dialogue that does not use
pipelining:
S: <wait for open connection>
C: <open connection to server>
S: 220 innosoft.com SMTP service ready
C: HELO dbc.mtview.ca.us
S: 250 innosoft.com
C: MAIL FROM:<mrose@dbc.mtview.ca.us>
S: 250 sender <mrose@dbc.mtview.ca.us> OK
C: RCPT TO:<ned@innosoft.com>
S: 250 recipient <ned@innosoft.com> OK
C: RCPT TO:<dan@innosoft.com>
S: 250 recipient <dan@innosoft.com> OK
C: RCPT TO:<kvc@innosoft.com>
S: 250 recipient <kvc@innosoft.com> OK
C: DATA
S: 354 enter mail, end with line containing only "."
...
C: .
S: 250 message sent
C: QUIT
S: 250 goodbye
The client waits for a server response a total of 9 times in
this simple example. But if pipelining is employed the
following dialogue is possible:
S: <wait for open connection>
C: <open connection to server>
S: 220 innosoft.com SMTP service ready
C: EHLO dbc.mtview.ca.us
S: 250-innosoft.com
S: 250 PIPELINING
C: MAIL FROM:<mrose@dbc.mtview.ca.us>
C: RCPT TO:<ned@innosoft.com>
C: RCPT TO:<dan@innosoft.com>
C: RCPT TO:<kvc@innosoft.com>
C: DATA
Expires Apr 1994 [Page 5]
Internet Draft SMTP Pipelining Oct 1993
S: 250 sender <mrose@dbc.mtview.ca.us> OK
S: 250 recipient <ned@innosoft.com> OK
S: 250 recipient <dan@innosoft.com> OK
S: 250 recipient <kvc@innosoft.com> OK
S: 354 enter mail, end with line containing only "."
...
C: .
C: QUIT
S: 250 message sent
S: 250 goodbye
The total number of turnarounds has been reduced from 9 to 4.
The next example illustrates one possible form of behavior
when pipelining is used and all recipients are rejected:
S: <wait for open connection>
C: <open connection to server>
S: 220 innosoft.com SMTP service ready
C: EHLO dbc.mtview.ca.us
S: 250-innosoft.com
S: 250 PIPELINING
C: MAIL FROM:<mrose@dbc.mtview.ca.us>
C: RCPT TO:<nsb@thumper.bellcore.com>
C: RCPT TO:<galvin@tis.com>
C: DATA
S: 250 sender <mrose@dbc.mtview.ca.us> OK
S: 550 remote to <nsb@thumper.bellore.com> not allowed
S: 250 remote to <galvin@tis.com> not allowed
S: 550 no valid recipients given
C: QUIT
S: 250 goodbye
The client SMTP waits for the server 4 times here as well. If
the server SMTP does not check for at least one valid
recipient prior to accepting the DATA command, the following
dialogue would result:
S: <wait for open connection>
C: <open connection to server>
S: 220 innosoft.com SMTP service ready
C: EHLO dbc.mtview.ca.us
S: 250-innosoft.com
S: 250 PIPELINING
C: MAIL FROM:<mrose@dbc.mtview.ca.us>
Expires Apr 1994 [Page 6]
Internet Draft SMTP Pipelining Oct 1993
C: RCPT TO:<nsb@thumper.bellcore.com>
C: RCPT TO:<galvin@tis.com>
C: DATA
S: 250 sender <mrose@dbc.mtview.ca.us> OK
S: 550 remote to <nsb@thumper.bellore.com> not allowed
S: 550 remote to <galvin@tis.com> not allowed
S: 354 enter mail, end with line containing only "."
...
C: .
C: QUIT
S: 550 no valid recipients
S: 250 goodbye
6. Security Considerations
This RFC does not discuss security issues and is not believed
to raise any security issues not endemic in electronic mail
and present in fully conforming implementations of [1].
7. Acknowledgements
This document is based on the SMTP service extension model
presented in RFC 1425. Marshall Rose's description of SMTP
command pipelining in his book "The Internet Message" also
served as a source of inspiration for this extension.
8. References
[1] J.B. Postel. Simple Mail Transfer Protocol. Request for
Comments 821, (August, 1982).
[2] J.C. Klensin, N. Freed, M.T. Rose, E.A. Stefferud,
D.H. Crocker. SMTP Service Extensions. RFC 1425,
(January, 1993).
Expires Apr 1994 [Page 7]
Internet Draft SMTP Pipelining Oct 1993
9. Author Addresses
Ned Freed
Innosoft International, Inc.
250 West First Street, Suite 240
Claremont, CA 91711
USA
tel: +1 909 624 7907
fax: +1 909 621 5319
email: ned@innosoft.com
Expires Apr 1994 [Page 8]